/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package TablaDeSimbolos;

import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class Funcion extends Procedimiento{
    private Tipo tipoResultado;
    private int offset;

    public Funcion(int etiqueta, ArrayList<ParametroFormal> parametrosFormales, Tipo tipoResultado, int nivelLexico){
        super(etiqueta, parametrosFormales, nivelLexico);
        this.tipoResultado = tipoResultado;
    }
    
    @Override
    public boolean esProcedimiento(){
        return false;
    }

    @Override
    public boolean esFuncion(){
        return true;
    }

    @Override
    public int getEtiqueta(){
        return etiqueta;
    }

    public Tipo getTipo(){
        return tipoResultado;
    }


    public int getOffset(){
        return offset;
    }

    @Override
    public void asignarOffsetParametros(ArrayList<ParametroFormal> l){
        ParametroFormal p;
        int off = -3;

        for (int x = l.size()-1; x >= 0; x--){
            p = l.get(x);

            if (p.getPasaje() == VALOR){
                off = off - p.getTipo().getCantElem() + 1;
                p.setOffset(off);
                off = off - 1;//p.getTipo().getCantElem();
            }
            else {
                // Los parametros por referencia solo ocupan una posicion de memoria
                p.setOffset(off);
                off = off - 1;
            }
        }

        offset = off;
    }

}
